home *** CD-ROM | disk | FTP | other *** search
/ Motor Sport Digital Archive Collection 1960s / Motor Sport Digital Archive Collection 1960s.iso / main.swf / scripts / mx / utils / ObjectProxy.as < prev    next >
Encoding:
Text File  |  2008-05-21  |  7.7 KB  |  260 lines

  1. package mx.utils
  2. {
  3.    import flash.events.Event;
  4.    import flash.events.EventDispatcher;
  5.    import flash.utils.IDataInput;
  6.    import flash.utils.IDataOutput;
  7.    import flash.utils.IExternalizable;
  8.    import flash.utils.Proxy;
  9.    import flash.utils.flash_proxy;
  10.    import flash.utils.getQualifiedClassName;
  11.    import mx.core.IPropertyChangeNotifier;
  12.    import mx.events.PropertyChangeEvent;
  13.    import mx.events.PropertyChangeEventKind;
  14.    
  15.    use namespace flash_proxy;
  16.    use namespace object_proxy;
  17.    
  18.    [Bindable("propertyChange")]
  19.    public dynamic class ObjectProxy extends Proxy implements IExternalizable, IPropertyChangeNotifier
  20.    {
  21.       protected var notifiers:Object;
  22.       
  23.       protected var propertyList:Array;
  24.       
  25.       private var _proxyLevel:int;
  26.       
  27.       protected var dispatcher:EventDispatcher;
  28.       
  29.       protected var proxyClass:Class;
  30.       
  31.       private var _item:Object;
  32.       
  33.       private var _id:String;
  34.       
  35.       public function ObjectProxy(param1:Object = null, param2:String = null, param3:int = -1)
  36.       {
  37.          proxyClass = ObjectProxy;
  38.          super();
  39.          if(!param1)
  40.          {
  41.             param1 = {};
  42.          }
  43.          _item = param1;
  44.          _proxyLevel = param3;
  45.          notifiers = {};
  46.          dispatcher = new EventDispatcher(this);
  47.          if(param2)
  48.          {
  49.             _id = param2;
  50.          }
  51.          else
  52.          {
  53.             _id = UIDUtil.createUID();
  54.          }
  55.       }
  56.       
  57.       public function dispatchEvent(param1:Event) : Boolean
  58.       {
  59.          return dispatcher.dispatchEvent(param1);
  60.       }
  61.       
  62.       public function willTrigger(param1:String) : Boolean
  63.       {
  64.          return dispatcher.willTrigger(param1);
  65.       }
  66.       
  67.       public function readExternal(param1:IDataInput) : void
  68.       {
  69.          var _loc2_:Object = null;
  70.          _loc2_ = param1.readObject();
  71.          _item = _loc2_;
  72.       }
  73.       
  74.       public function writeExternal(param1:IDataOutput) : void
  75.       {
  76.          param1.writeObject(_item);
  77.       }
  78.       
  79.       override flash_proxy function getProperty(param1:*) : *
  80.       {
  81.          var _loc2_:Object = null;
  82.          _loc2_ = null;
  83.          if(notifiers[param1.toString()])
  84.          {
  85.             return notifiers[param1];
  86.          }
  87.          _loc2_ = _item[param1];
  88.          if(_loc2_)
  89.          {
  90.             if(_proxyLevel == 0 || ObjectUtil.isSimple(_loc2_))
  91.             {
  92.                return _loc2_;
  93.             }
  94.             _loc2_ = object_proxy::getComplexProperty(param1,_loc2_);
  95.          }
  96.          return _loc2_;
  97.       }
  98.       
  99.       override flash_proxy function hasProperty(param1:*) : Boolean
  100.       {
  101.          return param1 in _item;
  102.       }
  103.       
  104.       public function get uid() : String
  105.       {
  106.          return _id;
  107.       }
  108.       
  109.       override flash_proxy function nextNameIndex(param1:int) : int
  110.       {
  111.          if(param1 == 0)
  112.          {
  113.             setupPropertyList();
  114.          }
  115.          if(param1 < propertyList.length)
  116.          {
  117.             return param1 + 1;
  118.          }
  119.          return 0;
  120.       }
  121.       
  122.       override flash_proxy function setProperty(param1:*, param2:*) : void
  123.       {
  124.          var _loc3_:* = undefined;
  125.          var _loc4_:IPropertyChangeNotifier = null;
  126.          var _loc5_:PropertyChangeEvent = null;
  127.          _loc3_ = _item[param1];
  128.          if(_loc3_ !== param2)
  129.          {
  130.             _item[param1] = param2;
  131.             _loc4_ = IPropertyChangeNotifier(notifiers[param1]);
  132.             if(_loc4_)
  133.             {
  134.                _loc4_.removeEventListener(PropertyChangeEvent.PROPERTY_CHANGE,propertyChangeHandler);
  135.                delete notifiers[param1];
  136.             }
  137.             if(dispatcher.hasEventListener(PropertyChangeEvent.PROPERTY_CHANGE))
  138.             {
  139.                if(param1 is QName)
  140.                {
  141.                   param1 = QName(param1).localName;
  142.                }
  143.                _loc5_ = PropertyChangeEvent.createUpdateEvent(this,param1.toString(),_loc3_,param2);
  144.                dispatcher.dispatchEvent(_loc5_);
  145.             }
  146.          }
  147.       }
  148.       
  149.       public function addEventListener(param1:String, param2:Function, param3:Boolean = false, param4:int = 0, param5:Boolean = false) : void
  150.       {
  151.          dispatcher.addEventListener(param1,param2,param3,param4,param5);
  152.       }
  153.       
  154.       override flash_proxy function nextName(param1:int) : String
  155.       {
  156.          return propertyList[param1 - 1];
  157.       }
  158.       
  159.       override flash_proxy function deleteProperty(param1:*) : Boolean
  160.       {
  161.          var _loc2_:IPropertyChangeNotifier = null;
  162.          var _loc3_:Object = null;
  163.          var _loc4_:* = false;
  164.          var _loc5_:PropertyChangeEvent = null;
  165.          _loc2_ = IPropertyChangeNotifier(notifiers[param1]);
  166.          if(_loc2_)
  167.          {
  168.             _loc2_.removeEventListener(PropertyChangeEvent.PROPERTY_CHANGE,propertyChangeHandler);
  169.             delete notifiers[param1];
  170.          }
  171.          _loc3_ = _item[param1];
  172.          _loc4_ = delete _item[param1];
  173.          if(dispatcher.hasEventListener(PropertyChangeEvent.PROPERTY_CHANGE))
  174.          {
  175.             _loc5_ = new PropertyChangeEvent(PropertyChangeEvent.PROPERTY_CHANGE);
  176.             _loc5_.kind = PropertyChangeEventKind.DELETE;
  177.             _loc5_.property = param1;
  178.             _loc5_.oldValue = _loc3_;
  179.             _loc5_.source = this;
  180.             dispatcher.dispatchEvent(_loc5_);
  181.          }
  182.          return _loc4_;
  183.       }
  184.       
  185.       override flash_proxy function callProperty(param1:*, ... rest) : *
  186.       {
  187.          return _item[param1].apply(_item,rest);
  188.       }
  189.       
  190.       public function removeEventListener(param1:String, param2:Function, param3:Boolean = false) : void
  191.       {
  192.          dispatcher.removeEventListener(param1,param2,param3);
  193.       }
  194.       
  195.       protected function setupPropertyList() : void
  196.       {
  197.          var _loc1_:String = null;
  198.          if(getQualifiedClassName(_item) == "Object")
  199.          {
  200.             propertyList = [];
  201.             for(_loc1_ in _item)
  202.             {
  203.                propertyList.push(_loc1_);
  204.             }
  205.          }
  206.          else
  207.          {
  208.             propertyList = ObjectUtil.getClassInfo(_item,null,{
  209.                "includeReadOnly":true,
  210.                "uris":["*"]
  211.             }).properties;
  212.          }
  213.       }
  214.       
  215.       object_proxy function getComplexProperty(param1:*, param2:*) : *
  216.       {
  217.          if(param2 is IPropertyChangeNotifier)
  218.          {
  219.             param2.addEventListener(PropertyChangeEvent.PROPERTY_CHANGE,propertyChangeHandler);
  220.             notifiers[param1] = param2;
  221.             return param2;
  222.          }
  223.          if(getQualifiedClassName(param2) == "Object")
  224.          {
  225.             param2 = new proxyClass(_item[param1],null,_proxyLevel > 0 ? _proxyLevel - 1 : _proxyLevel);
  226.             param2.addEventListener(PropertyChangeEvent.PROPERTY_CHANGE,propertyChangeHandler);
  227.             notifiers[param1] = param2;
  228.             return param2;
  229.          }
  230.          return param2;
  231.       }
  232.       
  233.       public function set uid(param1:String) : void
  234.       {
  235.          _id = param1;
  236.       }
  237.       
  238.       public function hasEventListener(param1:String) : Boolean
  239.       {
  240.          return dispatcher.hasEventListener(param1);
  241.       }
  242.       
  243.       public function propertyChangeHandler(param1:PropertyChangeEvent) : void
  244.       {
  245.          dispatcher.dispatchEvent(param1);
  246.       }
  247.       
  248.       override flash_proxy function nextValue(param1:int) : *
  249.       {
  250.          return _item[propertyList[param1 - 1]];
  251.       }
  252.       
  253.       object_proxy function get object() : Object
  254.       {
  255.          return _item;
  256.       }
  257.    }
  258. }
  259.  
  260.